home *** CD-ROM | disk | FTP | other *** search
-
- REM SCREEN.BAS V1.0 (12/15/86)
-
- REM $INCLUDE: 'LISTING.BAS'
- DEFINT A-Z
- REM $INCLUDE: 'SUBDIM.BAS'
- REM $INCLUDE: 'SHARED.BAS'
-
- SUB CHGATTR (ROW,SCOL,ECOL,ATTR) STATIC
- DEF SEG=&H40
- REM IF CRT = 1 THEN 40 X 25 COLOR
- REM IF CRT = 32 THEN 80 X 25 COLOR
- REM IF CRT = 48 THEN MONOCHROME
- REM IF CRT = 64 THEN BOTH
- CRT = PEEK(&H10)
- IF CRT = 48 THEN DEF SEG=&HB000 ELSE DEF SEG=&HB800
- PT = ((ROW-1)*160) + ((SCOL-1)*2) + 1
- FOR N = 1 TO (ECOL-SCOL+1)
- POKE PT+((N-1)*2),ATTR
- NEXT N
- END SUB
-
- SUB FUNCTIONS (FLD$) STATIC
- KEY OFF
- FOR N = 1 TO 10
- KEY N,""
- NEXT N
- AB=1 :COL=1 :N=1
- LOCATE 25,1 : PRINT SPC(72);
- 50 WHILE AB<LEN(FLD$)
- IF MID$(FLD$,AB,1)="," THEN AB=AB+1 : N=N+1 : GOTO 50
- AE=((INSTR(AB,FLD$,","))-AB)
- IF AE <= 0 THEN AE=LEN(FLD$)+1-AB
- LOCATE 25,COL : COLOR SFG,SBG : PRINT "[F";LEFT$((MKI$(N+48)),1);"]"; : COLOR RFG,RBG : PRINT MID$(FLD$,AB,AE); : COLOR SFG,SBG
- L=LEN(MID$(FLD$,AB,AE)) : AB=AB+L+1 : N=N+1 : COL=COL+L+6
- WEND
- COLOR FG,BG
- END SUB
- SUB ACCEPT (FLD$,F$) STATIC
- CALL LODARG (FLD$,N)
- IF LEFT$((ARG$(1)),1) = ";" THEN F$="" : KY=0 : EXIT SUB
- YES = NOT NO : NO = NOT YES
- IF INSTR(1,ARG$(3),"LCK") THEN KY=0 : EXIT SUB
- IF INSTR(1,ARG$(3),"ALP") THEN AP=YES ELSE AP=NO
- IF INSTR(1,ARG$(3),"CAP") THEN CP=YES ELSE CP=NO
- IF INSTR(1,ARG$(3),"NUM") THEN NM=YES ELSE NM=NO
- IF INSTR(1,ARG$(3),"NODEF") THEN DF=NO ELSE DF=YES
- IF INSTR(1,ARG$(3),"FIX") THEN FX=YES ELSE FX=NO
- IF INSTR(1,ARG$(3),"DEC") THEN DC=YES ELSE DC=NO
- IF INSTR(1,ARG$(3),"REV") THEN RV=YES ELSE RV=NO
- IF INSTR(1,ARG$(5),"YES") OR EDITMODE=YES THEN ED=YES ELSE ED=NO
- IF DC THEN DEF$=" " ELSE DEF$=" "
- IF NM AND NOT DC AND DF THEN DEF$="0"
- IF NM AND DC AND DF THEN DEF$="0.00"
- FL=VAL(ARG$(4))
- IF VAL(ARG$(1))<>0 THEN LOCATE VAL(ARG$(1)),VAL(ARG$(2)) ELSE LOCATE ,VAL(ARG$(2))
- ON ERROR GOTO INPERR
- GOSUB GETINP
- ON ERROR GOTO 0
- EXIT SUB
- GETINP:
- REM F$ = FIELD/PROMPT TO BE DISPLAYED
- REM FL = FIELD LENGTH
- REM WL = CHARACTER COUNT
- REM WI = COLUMN POINTER
- REM QY = CURRENT LINE
- REM QX = CURRENT COLUMN
- REM DP = DECIMAL COUNT
- REM ES = ERROR SWITCH
- REM W$ = INPUT CHARACTER
- REM KY = FUNCTION/CONTROL KEY ENTERED
- 100 DP=0: WL=0: WI=1: IN$=INKEY$ : TRANSFER=NO : BYTS!=FRE("")
- QX= POS(0): QY=CSRLIN
- IN$= SPACE$(FL)
- IF NOT DF THEN 590
- IF F$="" OR F$=SPACE$(FL+DC) THEN 490
- IF NOT DC THEN 470
- IN$=LEFT$(F$,FL-3)+"."+RIGHT$(F$,2) : WL=LEN(IN$) : GOTO 490
- 470 IN$= LEFT$(F$+SPACE$(FL),FL): WL=LEN(F$)
- 480 IF MID$(IN$,WL,1)=" " THEN WL=WL-1: IF WL>0 THEN 480
- 490 IF RV THEN COLOR RFG,RBG ELSE COLOR FG,BG
- LOCATE QY,QX,1: PRINT IN$;
- 510 LOCATE QY,QX+WI-1
- 520 W$=INKEY$: DEF SEG=&H40: QK=PEEK(&H17) AND 96:
- IF QK1<>QK THEN LOCATE 25,73: COLOR RFG,RBG : PRINT LOCKS$(QK/32);: QK1=QK: SOUND 400+QK,.3: GOTO 590
- IF DATSW THEN CALL DISDATE
- IF W$="" THEN 520
- KY=0
- IF ES THEN LOCATE 24,1 : PRINT SPC(40); : COLOR FG,BG : LOCATE QY,QX+WI-1 : ES=NO : IF RV THEN COLOR RFG,RBG
- IF LEN(W$)=1 THEN 660 ELSE KY= ASC(RIGHT$(W$,1))
- IF KY>=F1 AND KY<=F10 THEN RETURN
- IF KY= CTRL.RT THEN 860
- IF KY= CTRL.LF THEN 860
- IF KY= PG.UP THEN 860
- IF KY= PG.DN THEN 860
- IF NOT AP THEN 520
- IF KY= INS.KEY THEN IF INSERT=NO THEN INSERT=YES: LOCATE,,,CU1,CU2: GOTO 490 ELSE INSERT=NO: LOCATE,,,CU2: GOTO 520
- IF KY= RT.CURSOR THEN WI=WI-(WI<(WL+1)): GOTO 510
- IF KY= LF.CURSOR THEN WI=WI+(WI> 1): GOTO 510
- IF KY= DEL.KEY THEN IF WL<>0 AND WI<=FL AND WL>=WI THEN IN$= LEFT$(IN$,WI-1)+RIGHT$(IN$,FL-WI)+" ": WL=WL-1: GOTO 490
- IF INSERT THEN INSERT=NO: LOCATE,,,CU2
- IF KY= CTRL.HOME THEN WI=1: GOTO 510
- IF KY= CTRL.END THEN WI= WL+1: GOTO 510
- IF KY= HOME THEN IN$=LEFT$(IN$,WI-1)+SPACE$(FL-WI+1): WL=WI-1: GOTO 490
- GOTO 510
- 590 IF RV THEN COLOR RFG,RBG ELSE COLOR FG,BG
- GOTO 510
- 660 IF W$= NTR$ THEN 860
- IF W$= ESC$ THEN KY=ESC : GOTO 940
- IF WI>FL THEN IF W$<> BKSP$ THEN ERROR 101 : GOTO 510
- 730 IF AP AND NOT CP THEN IF W$>=" " AND W$<="~" THEN 750
- IF NM THEN IF W$>="0" AND W$<="9" THEN 750
- IF NM THEN IF WI=1 AND W$="-" THEN 750
- IF DC THEN IF W$="." AND DP=0 THEN DP=1 : GOTO 770
- IF AP AND CP THEN IF W$>="a" AND W$<="z" THEN W$=CHR$(ASC(W$)-32): GOTO 750 ELSE IF W$>=" " AND W$<"a" THEN 750
- IF W$=BKSP$ THEN IF WI>1 THEN IN$=LEFT$(IN$,WI-2)+RIGHT$(IN$,FL-WI+1)+" ": WL=WL-1: WI=WI-1: DP=DP+(DP>0):LOCATE ,QX+WI-1: PRINT " ";: GOTO 510
- IF NM THEN IF W$<>BKSP$ THEN ERROR 103
- GOTO 510
- 750 IF NOT DC THEN 770 ELSE IF DP=0 AND W$<>"." AND WI=FL-2 THEN 520
- IF DP=0 THEN 770 ELSE IF DP=3 THEN 520 ELSE DP=DP+1
- 770 IF NOT INSERT THEN MID$(IN$,WI,1)=W$: TRANSFER=YES : GOTO 790
- IF WL < FL THEN WL=WL+1: IN$= LEFT$( LEFT$(IN$,WI-1) +W$ +RIGHT$(IN$,FL-WI+1), FL): WI=WI+1 : TRANSFER=YES : GOTO 490 ELSE 520
- 790 IF WI>1 THEN 820
- IN$=W$+SPACE$(FL-1) : IF W$<>"." THEN DP=0
- LOCATE,QX: PRINT IN$;: LOCATE,QX: WL=1
- 820 PRINT W$;
- WI=WI+1: IF WI>WL THEN WL=WI-1
- IF FL>1 OR WL<FL THEN 520
- 860 COLOR FG,BG: LOCATE QY,QX,,CU2: INSERT=NO
- IF KY<>0 THEN 960
- IF WL=0 AND NOT ED THEN ERROR 102 : GOTO 510
- IF FX AND WL<>0 AND WL<FL THEN ERROR 104 : GOTO 510
- IF NOT TRANSFER AND ((WL=0 AND EDITMODE) OR (WL<>0)) THEN 950
- IF DC THEN 900
- IF NM THEN 930
- IN$= LEFT$(IN$+SPACE$(FL),FL): GOTO 935
- 900 WHILE LEFT$(IN$,1)="0"
- IN$=RIGHT$(IN$,FL-1)+" " : WL=WL-1
- WEND
- IF WL>0 THEN IN$=LEFT$(IN$,WL)+MID$(".00",DP+1,3-DP) ELSE IN$=DEF$ : WL=4 : DP=3
- IN$=SPACE$(FL-WL-(3-DP))+IN$: PRINT IN$;
- IN$=LEFT$(IN$,FL-3)+RIGHT$(IN$,2): F$=IN$ : RETURN
- 930 WHILE LEFT$(IN$,1)="0"
- IN$=RIGHT$(IN$,FL-1)+" " : WL=WL-1
- WEND
- IF WL>0 THEN IN$=SPACE$(FL-WL)+LEFT$(IN$,WL) ELSE IN$=SPACE$(FL-1)+DEF$
- 935 F$=IN$
- 940 PRINT IN$;
- 950 RETURN
-
- 960 IF WL<>0 AND F$="" THEN 510
- IF KY<>CTRL.LF AND NOT ED THEN ERROR 102 : GOTO 510
- IN$= SPACE$(FL)
- IF F$="" THEN 940
- IF NOT DC THEN 970
- IF F$<>SPACE$(FL-1) THEN IN$=LEFT$(F$,FL-3)+"."+RIGHT$(F$,2) : GOTO 940
- 970 IN$= LEFT$(F$+SPACE$(FL),FL) : GOTO 940
- END SUB
- INPERR:
- CALL DISERR (ERR,ER$)
- RESUME NEXT
- SUB DISERR (EN,ER$) STATIC
- COLOR HL,BG: LOCATE 24,1 : PRINT SPC(40); : BEEP : ES=YES : LOCATE ,1
- IF EN<100 THEN PRINT "BASIC ERROR ="EN "LINE ="ERL;
- IF EN>200 THEN COLOR BL : PRINT ER$;
- IF EN=101 THEN PRINT "<<FIELD OVERFLOW>>";
- IF EN=102 THEN PRINT "<<CAN'T OMIT>>";
- IF EN=103 THEN PRINT "<<NON-NUMERIC>>";
- IF EN=104 THEN PRINT "<<FIXED LENGTH INPUT>>";
- IF EN=105 THEN PRINT "<<INVALID NUMBER>>";
- IF EN=106 THEN PRINT "<<ENTRY ***VOIDED*** >>";
-
- IF EN=111 THEN PRINT "[RECORD NOT FOUND]";
- IF EN=112 THEN PRINT "[END OF FILE]";
- IF EN=113 THEN PRINT "[PARTIAL MATCH FOUND]";
- IF EN=115 THEN PRINT "[INSUFFICIENT KEY INPUT]";
- COLOR FG,BG
- END SUB
- SUB ASKUM (QUEST$,ANS$) STATIC
- COLOR HL,BG : LOCATE 24,1 : PRINT SPC(80); : BEEP
- PRINT QUEST$;"? [Y,N] <DEFAULT=N>:";
- ANS$=""
- WHILE ANS$=""
- ANS$=INKEY$
- WEND
- LOCATE 24,1 : PRINT SPC(80);
- IF (ANS$<>"Y" AND ANS$<>"y") THEN ANS$="N"
- COLOR FG,BG
- END SUB
- SUB DISDATE STATIC
- STATIC TIM$
- IF LEFT$(TIM$,5)=LEFT$(TIME$,5) OR NOT DATSW THEN EXIT SUB
- CX=CSRLIN : CY=POS(0)
- DAT$=DATE$:TIM$=TIME$:X=VAL(TIM$):IF X>11 THEN CH$=" pm":X=X\13+X MOD 13 ELSE CH$=" am":IF X=0 THEN X=12
- MSG$="Date: "+MID$("JanFebMarAprMayJunJulAugSepOctNovDec",3*VAL(DAT$)-2,3)+STR$(VAL(MID$(DAT$,4)))+", "+RIGHT$(DAT$,4)+" Time:"+STR$(X)+MID$(TIM$,3,3)+CH$
- COLOR HL,BG : LOCATE 1,22 : PRINT MSG$; : LOCATE CX,CY : COLOR FG,BG
- END SUB
- SUB DISPBIN (FLD$,BDATA,BUMP) STATIC
- DATA$=STR$(BDATA)
- CALL DISPLAY (FLD$,DATA$,BUMP)
- END SUB
- SUB DISPLAY (FLD$,DATA$,BUMP) STATIC
- CALL LODARG (FLD$,N)
- IF LEFT$((ARG$(1)),1) = ";" THEN EXIT SUB
- LOCATE VAL(ARG$(1))+BUMP,VAL(ARG$(2))
- IF INSTR(1,ARG$(3),"BLINK") THEN COLOR BL,BG
- IF INSTR(1,ARG$(3),"REV") THEN COLOR RFG,RBG
- IF INSTR(1,ARG$(3),"HIGH") THEN COLOR HL,BG
-
- IF DATA$="" THEN PRINT ARG$(4) : COLOR FG,BG : EXIT SUB
- YES = NOT NO : NO = NOT YES
- IF INSTR(1,ARG$(3),"ALP") THEN AP=YES ELSE AP=NO
- IF INSTR(1,ARG$(3),"BIN") THEN BN=YES ELSE BN=NO
- IF INSTR(1,ARG$(3),"NUM") THEN NM=YES ELSE NM=NO
- IF INSTR(1,ARG$(3),"DEC") THEN DC=YES ELSE DC=NO
- FL=VAL(ARG$(4))
- IF BN THEN PRINT RIGHT$(SPACE$(FL)+DATA$,FL);
- IF DC AND DATA$=SPACE$(FL-1) THEN PRINT DATA$; : COLOR FG,BG : EXIT SUB
- IF DC THEN PRINT LEFT$(DATA$,FL-3)+"."+RIGHT$(DATA$,2);
- IF (NOT DC) AND (NOT BN) THEN PRINT DATA$;
- COLOR FG,BG
- END SUB
- SUB LODARG (FLD$,N) STATIC
- AB=1 : AE=1 : N=0
- WHILE AE>0
- AE=INSTR(AB,FLD$,",")
- N=N+1
- IF AE>0 THEN ARG$(N) = MID$(FLD$,AB,AE-AB) ELSE ARG$(N) = MID$(FLD$,AB)
- AB=AE+1
- WEND
- END SUB
- SUB LODWK1 (FLD$,N) STATIC
- AB=1 : AE=1 : N=0
- WHILE AE>0
- AE=INSTR(AB,FLD$,",")
- N=N+1
- IF AE>0 THEN WRK1%(N) = VAL(MID$(FLD$,AB,AE-AB)) ELSE WRK1%(N) = VAL(MID$(FLD$,AB))
- AB=AE+1
- WEND
- END SUB
- SUB LODWK2 (FLD$,N) STATIC
- AB=1 : AE=1 : N=0
- WHILE AE>0
- AE=INSTR(AB,FLD$,",")
- N=N+1
- IF AE>0 THEN WRK2%(N) = VAL(MID$(FLD$,AB,AE-AB)) ELSE WRK2%(N) = VAL(MID$(FLD$,AB))
- AB=AE+1
- WEND
- END SUB
-